import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn } from 'typeorm';
import { ApiProperty } from '@nestjs/swagger';

/**
 * 文件类型枚举
 */
export enum FileType {
  HOMEPAGE = 'homepage',  // 首页文件
  SCORE = 'score'        // 比分文件
}

/**
 * 导入频率类型枚举
 */
export enum ImportFrequency {
  DAILY = 'daily',           // 每日一次
  INTERVAL = 'interval'      // 间隔执行
}

/**
 * 比赛文件导入配置实体
 */
@Entity('match_import_configs')
export class MatchImportConfig {
  @ApiProperty({ description: '配置ID' })
  @PrimaryGeneratedColumn()
  id: number;

  @ApiProperty({ description: '配置名称' })
  @Column({ length: 100, comment: '配置名称' })
  name: string;

  @ApiProperty({ description: '文件导入目录路径' })
  @Column({ length: 500, comment: '文件导入目录路径' })
  importPath: string;

  @ApiProperty({ description: '文件类型', enum: FileType })
  @Column({ 
    type: 'enum', 
    enum: FileType, 
    default: FileType.HOMEPAGE, 
    comment: '文件类型：homepage-首页文件，score-比分文件' 
  })
  fileType: FileType;

  @ApiProperty({ description: '导入频率类型', enum: ImportFrequency })
  @Column({ 
    type: 'enum', 
    enum: ImportFrequency, 
    default: ImportFrequency.DAILY, 
    comment: '导入频率：daily-每日一次，interval-间隔执行' 
  })
  frequency: ImportFrequency;

  @ApiProperty({ description: '是否启用自动导入' })
  @Column({ default: true, comment: '是否启用自动导入' })
  isEnabled: boolean;

  @ApiProperty({ description: '配置描述' })
  @Column({ length: 500, nullable: true, comment: '配置描述' })
  description?: string;

  @ApiProperty({ description: '导入时间(小时)', example: 12 })
  @Column({ default: 12, comment: '导入时间(小时,0-23)，仅在daily模式下生效' })
  importHour: number;

  @ApiProperty({ description: '导入时间(分钟)', example: 35 })
  @Column({ default: 35, comment: '导入时间(分钟,0-59)，仅在daily模式下生效' })
  importMinute: number;

  @ApiProperty({ description: '间隔时间(分钟)', example: 30 })
  @Column({ default: 30, comment: '间隔时间(分钟)，仅在interval模式下生效' })
  intervalMinutes: number;

  @ApiProperty({ description: '最大重试次数', example: 6 })
  @Column({ default: 6, comment: '导入失败时的最大重试次数' })
  maxRetries: number;

  @ApiProperty({ description: '重试间隔(分钟)', example: 5 })
  @Column({ default: 5, comment: '重试间隔时间(分钟)' })
  retryIntervalMinutes: number;

  @ApiProperty({ description: '失败原因' })
  @Column({ type: 'text', nullable: true, comment: '最近一次导入失败的详细原因' })
  failureReason?: string;

  @ApiProperty({ description: '创建时间' })
  @CreateDateColumn({ comment: '创建时间' })
  createdAt: Date;

  @ApiProperty({ description: '更新时间' })
  @UpdateDateColumn({ comment: '更新时间' })
  updatedAt: Date;
}